CyberSploit2 - Vulnhub - Level: Easy - Bericht

Easy

Verwendete Tools

arp-scan
vi (Texteditor)
nmap
nikto
gobuster
Webbrowser (Quelltextanalyse)
ROT47 Decoder (Extern)
curl
tr
ssh
ls
cat
find
docker
chroot
GTFOBins (Referenz)
id

Inhaltsverzeichnis

Reconnaissance

┌──(root㉿Cybermaschine)-[~] └─# arp-scan -l
192.168.2.182	08:00:27:2b:8c:03	PCS Systemtechnik GmbH
                    

Analyse: Der Befehl `arp-scan -l` sendet ARP-Anfragen ins lokale Netzwerk, um aktive Hosts zu identifizieren.

Bewertung: Ein Host mit der IP `192.168.2.182` wurde gefunden. Die MAC-Adresse (`08:00:27:2b:8c:03`) deutet auf eine VirtualBox-VM hin (Hersteller: PCS Systemtechnik GmbH).

Empfehlung (Pentester): `192.168.2.182` als Ziel-IP für weitere Scans vormerken.
Empfehlung (Admin): Standard-Netzwerkerkennung. Implementierung von Netzwerk-Monitoring kann helfen, Scans zu erkennen.

┌──(root㉿Cybermaschine)-[~] └─# vi /etc/hosts
 [Inhalt der /etc/hosts Datei nach der Bearbeitung]
 192.168.2.182   CyberSploit2.vln
                    

Analyse: Die lokale `/etc/hosts`-Datei wird bearbeitet, um den Hostnamen `CyberSploit2.vln` der IP-Adresse `192.168.2.182` zuzuordnen.

Bewertung: Sinnvoller Schritt, um das Zielsystem konsistent über seinen Hostnamen anzusprechen, besonders wichtig für Web-Tests.

Empfehlung (Pentester): Verwende `CyberSploit2.vln` in nachfolgenden Befehlen.
Empfehlung (Admin): Clientseitige Einstellung.

┌──(root㉿Cybermaschine)-[~] └─# nmap -sS -sC -sV -T5 -A -Pn 192.168.2.182 -p-
Starting Nmap 7.94 ( https://nmap.org ) at 2023-10-18 14:59 CEST
Nmap scan report for CyberSploit2.vln (192.168.2.182)
Host is up (0.00012s latency).
Not shown: 65533 closed tcp ports (reset)
PRT   STATE SERVICE VERSIN
22/tcp open  ssh     penSSH 8.0 (protocol 2.0)
| ssh-hostkey:
|   3072 ad:6d:15:e7:44:e9:7b:b8:59:09:19:5c:bd:d6:6b:10 (RSA)
|   256 d6:d5:b4:5d:8d:f9:5e:6f:3a:31:ad:81:80:34:9b:12 (ECDSA)
|_  256 69:79:4f:8c:90:e9:43:6c:17:f7:31:e8:ff:87:05:31 (ED25519)
80/tcp open  http    Apache httpd 2.4.37 ((centos))
| http-methods:
|_  Potentially risky methods: TRACE
|_http-title: CyberSploit2
|_http-server-header: Apache/2.4.37 (centos)
MAC Address: 08:00:27:2B:8C:03 (racle VirtualBox virtual NIC)
Device type: general purpose
Running: Linux 3.X|4.X
S CPE: cpe:/o:linux:linux_kernel:3 cpe:/o:linux:linux_kernel:4
S details: Linux 3.2 - 4.9
Network Distance: 1 hop

TRACERUTE
HP RTT     ADDRESS
1   0.12 ms CyberSploit2.vln (192.168.2.182)
                    

Analyse: Ein umfassender Nmap-Scan (`-sS -sC -sV -T5 -A -Pn -p-`) wird gegen das Ziel durchgeführt.

Bewertung: Zwei offene Ports werden identifiziert: * **Port 22 (SSH):** OpenSSH Version 8.0. Relativ modern. * **Port 80 (HTTP):** Apache httpd 2.4.37 (CentOS). Eine etwas ältere Version. Der Seitentitel ist "CyberSploit2". Die HTTP-Methode TRACE ist aktiviert, was ein geringes Risiko (Cross-Site Tracing - XST) darstellen kann.

Empfehlung (Pentester): Konzentriere die Untersuchung auf den Webserver (Port 80). Prüfe SSH auf schwache Passwörter, auch wenn die Version relativ neu ist.
Empfehlung (Admin): Apache aktualisieren. Die TRACE-Methode im Apache deaktivieren (`TraceEnable Off` in der Konfiguration). SSH sicher konfigurieren (Key-Authentifizierung, Fail2Ban etc.).

┌──(root㉿Cybermaschine)-[~] └─# nmap -sS -sC -sV -T5 -A -Pn 192.168.2.182 -p- | grep open
22/tcp open  ssh     penSSH 8.0 (protocol 2.0)
80/tcp open  http    Apache httpd 2.4.37 ((centos))
                    

Analyse: Wiederholung des Nmap-Scans mit Filterung auf offene Ports.

Bewertung: Bestätigt die beiden offenen Ports SSH (22) und HTTP (80).

Empfehlung (Pentester): Beginne mit der Webserver-Enumeration.
Empfehlung (Admin): Siehe vorherige Nmap-Empfehlungen.

┌──(root㉿Cybermaschine)-[~] └─# nikto -h 192.168.2.182
- Nikto v2.5.0
---------------------------------------------------------------------------
+ Target IP:          192.168.2.182
+ Target Hostname:    192.168.2.182
+ Target Port:        80
+ Start Time:         2023-10-18 14:59:06 (GMT2)
---------------------------------------------------------------------------
+ Server: Apache/2.4.37 (centos)
+ /: The anti-clickjacking X-Frame-Options header is not present. [...]
+ /: The X-Content-Type-Options header is not set. [...]
+ Apache/2.4.37 appears to be outdated [...].
+ OPTIONS: Allowed HTTP Methods: GET, POST, OPTIONS, HEAD, TRACE .
+ /: HTTP TRACE method is active which suggests the host is vulnerable to XST. [...]
+ /icons/: Directory indexing found.
+ /icons/README: Apache default file found. [...]
+ 8908 requests: 0 error(s) and 7 item(s) reported on remote host
+ End Time:           2023-10-18 14:59:27 (GMT2) (21 seconds)
---------------------------------------------------------------------------
+ 1 host(s) tested
                     

Analyse: Der Webserver-Scanner `nikto` wird gegen Port 80 ausgeführt.

Bewertung: Nikto bestätigt die Ergebnisse von Nmap und fügt hinzu: * Fehlende Sicherheitsheader (`X-Frame-Options`, `X-Content-Type-Options`). * Bestätigung der veralteten Apache-Version. * Bestätigung der aktiven TRACE-Methode (XST-Risiko). * Directory Indexing im Standard-Verzeichnis `/icons/` gefunden. * Standard-Apache-Datei `/icons/README` gefunden. Es wurden keine spezifischen Webanwendungen (wie WordPress o.ä.) oder offensichtlich kritische Schwachstellen durch Nikto gefunden.

Empfehlung (Pentester): Führe einen Verzeichnis-Bruteforce durch, um versteckte Inhalte zu finden. Untersuche die Startseite (`index.html`) manuell.
Empfehlung (Admin): Apache aktualisieren, TRACE deaktivieren, Sicherheitsheader hinzufügen, Directory Indexing deaktivieren (`Options -Indexes`), Standard-Dateien entfernen.

Web Enumeration & Credential Discovery

Analyse:** Der Webserver auf Port 80 wird weiter untersucht.

┌──(root㉿Cybermaschine)-[~] └─# gobuster dir -u http://cybersploit2.vln -x [...] -w [...] -b '403,404,301' -e --no-error -k
http://cybersploit2.vln/index.html           (Status: 200) [Size: 3471]
                    

Analyse: `gobuster dir` wird verwendet, um nach Verzeichnissen und Dateien zu suchen. Die Option `-b 301` blendet Redirects aus.

Bewertung: Findet nur `index.html`. Aufgrund des Filters `-b 301` könnten relevante Verzeichnisse übersehen worden sein. Die `index.html` ist der nächste logische Schritt.

Empfehlung (Pentester): Analysiere den Quelltext von `index.html`. Führe den Scan ggf. ohne `-b 301` erneut durch.
Empfehlung (Admin): Keine spezifische Empfehlung für diesen Schritt.

Analyse:** Der Quelltext der Startseite wird untersucht.

[Manuelle Analyse von http://cybersploit2.vln/index.html Quelltext] └─#




[... HTML-Tabelle mit kodierten Daten ...]
D92:=6?5C2
4J36CDA=@:E`
[...]
                     
[Externe Dekodierung (z.B. http://fbcs.bplaced.net/multi_encoder_decoder.html)] └─#
Input (ROT47): D92:=6?5C2   -> Output: shailendra
Input (ROT47): 4J36CDA=@:E` -> Output: cybersploit1
                     

Analyse: Im Quelltext der `index.html` wird ein Kommentar `` gefunden. Weiter unten im Code (vermutlich in einer HTML-Tabelle, basierend auf den späteren `curl`-/`tr`-Befehlen) befinden sich die ROT47-kodierten Zeichenketten `D92:=6?5C2` und `4J36CDA=@:E\``. ROT47 ist eine Cäsar-Verschlüsselungsvariante, die alle druckbaren ASCII-Zeichen verschiebt. Diese Strings werden mit einem externen Decoder entschlüsselt.

Bewertung: **Kritischer Fund!** Die Dekodierung der ROT47-Strings ergibt einen Benutzernamen und ein Passwort: `shailendra`:`cybersploit1`. Dies sind höchstwahrscheinlich die Zugangsdaten für den SSH-Dienst.

Empfehlung (Pentester): Versuche sofort, dich mit den Zugangsdaten `shailendra:cybersploit1` per SSH (Port 22) anzumelden.
Empfehlung (Admin): Speichere niemals Zugangsdaten, auch nicht verschleiert oder kodiert, im Quelltext von Webseiten. Verwende sichere Authentifizierungsmethoden.

┌──(root㉿Cybermaschine)-[~] └─# curl http://cybersploit2.vln/index.html | grep "" | tr -d ""| tr -d "/"| tr -d " " > kennworter.txt
[Inhalt von kennworter.txt nach Ausführung] └─#
D92:=6?5C2
4J36CDA=@:E`
                     

Analyse: Dieser Befehl extrahiert die ROT47-kodierten Strings automatisiert aus dem HTML-Quelltext: * `curl http://cybersploit2.vln/index.html`: Lädt den HTML-Code herunter. * `grep ""`: Filtert Zeilen, die `` enthalten (vermutlich die Tabellenzellen mit den kodierten Daten). * `tr -d ""`: Entfernt die ``-Tags. * `tr -d "/"`: Entfernt Schrägstriche (vermutlich aus ``). * `tr -d " "`: Entfernt Leerzeichen/Whitespace. * `> kennworter.txt`: Speichert das Ergebnis in einer Datei.

Bewertung: Dies ist eine Methode, die gefundenen kodierten Strings zu isolieren. Es bestätigt die manuelle Analyse, liefert aber keine neuen Informationen über die Entschlüsselung selbst.

Empfehlung (Pentester): Die manuelle Analyse und Dekodierung war ausreichend. Dieser Schritt ist optional.
Empfehlung (Admin): Keine spezifische Empfehlung für diesen Schritt.

Initial Access (SSH)

Analyse:** Versuch, sich mit den gefundenen Zugangsdaten per SSH anzumelden.

┌──(root㉿Cybermaschine)-[~] └─# ssh shailendra@cybersploit2.vln
shailendra@cybersploit2.vln's password: cybersploit1 [Passworteingabe]
Last failed login: Wed Oct 18 18:44:55 IST 2023 from 192.168.2.199 on ssh:notty
There were 621 failed login attempts since the last successful login.
Last login: Wed Jul 15 12:32:09 2020
[shailendra@localhost ~]$
                    

Analyse: Eine SSH-Verbindung zum Ziel `cybersploit2.vln` wird als Benutzer `shailendra` initiiert. Das zuvor dekodierte Passwort `cybersploit1` wird eingegeben.

Bewertung: **Initial Access erfolgreich!** Der Login als Benutzer `shailendra` mittels der im Webseiten-Quelltext gefundenen und dekodierten Zugangsdaten war erfolgreich. Die hohe Anzahl fehlgeschlagener Login-Versuche (621) deutet darauf hin, dass das Passwort möglicherweise auch durch Brute-Force hätte gefunden werden können, aber die ROT47-Methode war schneller.

Empfehlung (Pentester): Führe grundlegende Enumeration als Benutzer `shailendra` durch. Suche nach Hinweisen, Konfigurationsdateien oder Möglichkeiten zur Privilege Escalation.
Empfehlung (Admin): Ändere das Standardpasswort für `shailendra`. Speichere keine Zugangsdaten im Webseiten-Code. Implementiere Brute-Force-Schutz für SSH (z.B. Fail2Ban).

[shailendra@localhost ~]$ ls
hint.txt
[shailendra@localhost ~]$ cat hint.txt
docker

Analyse: Im Home-Verzeichnis des Benutzers `shailendra` wird eine Datei `hint.txt` gefunden und ihr Inhalt angezeigt.

Bewertung: Die Datei enthält nur das Wort "docker". Dies ist ein **sehr starker Hinweis** auf den nächsten Schritt: Privilege Escalation über Docker.

Empfehlung (Pentester): Prüfe, ob der Benutzer `shailendra` zur Gruppe `docker` gehört (`id`). Wenn ja, ist eine einfache Rechteerweiterung mittels Docker möglich (siehe GTFOBins). Prüfe, ob der Docker-Daemon läuft (`ps aux | grep docker`).
Empfehlung (Admin): Füge Benutzer nur zur Gruppe `docker` hinzu, wenn dies absolut notwendig ist, da dies oft gleichbedeutend mit Root-Rechten ist.

[shailendra@localhost ~]$ find / -type f -perm -4000 -ls 2>/dev/null
   353151    132 -rwsr-xr-x   1  root     root       133928 Nov  9  2019 /usr/bin/chage
   365888    156 -rwsr-xr-x   1  root     root       156736 Nov  9  2019 /usr/bin/gpasswd
   365891     88 -rwsr-xr-x   1  root     root        88488 Nov  9  2019 /usr/bin/newgrp
   375071     52 -rwsr-xr-x   1  root     root        50448 Apr 24  2020 /usr/bin/su
   375074     36 -rwsr-xr-x   1  root     root        33760 Apr 24  2020 /usr/bin/umount
   375056     52 -rwsr-xr-x   1  root     root        50576 Apr 24  2020 /usr/bin/mount
   559581    164 s--x--x   1  root     root       165656 Apr 24  2020 /usr/bin/sudo
   398432     36 -rwsr-xr-x   1  root     root        35624 Apr  9  2020 /usr/bin/pkexec
   544230     36 -rwsr-xr-x   1  root     root        33600 Apr  7  2020 /usr/bin/passwd
   418961     68 -rwsr-xr-x   1  root     root        65904 Nov  8  2019 /usr/bin/crontab
  [...]
                    

Analyse: Suche nach SUID-Binaries auf dem System.

Bewertung: Die Liste zeigt viele Standard-SUID-Binaries. `sudo` ist vorhanden, aber die Berechtigungen sind interessant (`s--x--x`). Es gibt keine offensichtlich ungewöhnlichen oder benutzerdefinierten SUID-Dateien, die auf einen einfachen Exploit hindeuten.

Empfehlung (Pentester): Aufgrund des "docker"-Hinweises ist der wahrscheinlichste Weg die Docker-Privilege-Escalation. Prüfe trotzdem kurz die `sudo`-Rechte (`sudo -l`).
Empfehlung (Admin): Entferne unnötige SUID-Bits. Konfiguriere `sudo` sicher.

Proof of Concept: Initial Access

Ziel des POC: Demonstrieren, wie durch Analyse des Webseiten-Quelltextes ROT47-kodierte Zugangsdaten gefunden, dekodiert und anschließend für einen erfolgreichen SSH-Login verwendet werden können.

Voraussetzungen:

  • Zugriff auf den Webserver auf Port 80 (`http://cybersploit2.vln`).
  • ROT47-kodierte Credentials im HTML-Quelltext.
  • Aktiver SSH-Dienst auf Port 22.
  • Tools auf Angreiferseite: Webbrowser/`curl`, ROT47-Decoder, `ssh`.

Schritt-für-Schritt Anleitung:

1. Quelltext analysieren: Den HTML-Quelltext von `http://cybersploit2.vln` untersuchen und den ``-Kommentar sowie die kodierten Strings (`D92:=6?5C2`, `4J36CDA=@:E\``) finden.

[Angreifer-System] └─# curl http://cybersploit2.vln/index.html | grep ROT47
[Angreifer-System] └─# curl http://cybersploit2.vln/index.html | grep ""
[...]D92:=6?5C2[...]4J36CDA=@:E`[...]

2. Strings dekodieren: Einen ROT47-Decoder verwenden.

[Externe Dekodierung] └─#
D92:=6?5C2 -> shailendra
4J36CDA=@:E` -> cybersploit1

3. SSH-Login: Mit den dekodierten Credentials anmelden.

┌──(root㉿Cybermaschine)-[~] └─# ssh shailendra@cybersploit2.vln
shailendra@cybersploit2.vln's password: cybersploit1
[...]
[shailendra@localhost ~]$

Ergebnis & Bewertung: **Initialer Zugriff erfolgreich!** Durch das Auffinden und Dekodieren der im Quelltext versteckten Zugangsdaten konnte eine SSH-Sitzung als Benutzer `shailendra` etabliert werden. Dies unterstreicht die Gefahr, sensible Informationen – selbst verschleiert – in clientseitigem Code zu hinterlegen.

Empfehlung (Pentester): Beginne die Post-Exploitation-Phase als `shailendra`.
Empfehlung (Admin): **Niemals Zugangsdaten in HTML/JS/CSS speichern!** Verwende serverseitige Authentifizierung und sichere Passwortspeicherung.

Privilege Escalation (Docker Breakout)

Analyse:** Basierend auf dem "docker"-Hinweis in `hint.txt` wird versucht, über Docker Root-Rechte zu erlangen.

Analyse:** Recherche auf GTFOBins (oder ähnlichen Ressourcen) zeigt eine bekannte Methode zur Rechteerweiterung, wenn ein Benutzer Docker-Befehle ausführen kann.

[Referenz: https://gtfobins.github.io/gtfobins/docker/#shell] └─#
# Shell

It can be used to break out from restricted environments by spawning an
interactive system shell.

The resulting is a root shell.

docker run -v /:/mnt --rm -it alpine chroot /mnt sh
                     

Analyse: Der Befehl von GTFOBins wird erklärt: * `docker run`: Startet einen neuen Docker-Container. * `-v /:/mnt`: Mountet das gesamte Root-Dateisystem (`/`) des Host-Systems in das Verzeichnis `/mnt` innerhalb des Containers. Dies ist der entscheidende Schritt, der Zugriff auf alle Host-Dateien ermöglicht. * `--rm`: Löscht den Container automatisch nach dem Beenden. * `-it`: Startet den Container interaktiv mit einem Pseudo-Terminal. * `alpine`: Verwendet das schlanke Alpine Linux Image als Basis für den Container. * `chroot /mnt`: Wechselt das Root-Verzeichnis der Shell innerhalb des Containers auf das gemountete Host-Dateisystem (`/mnt`). * `sh`: Startet eine Shell innerhalb des `chroot`-Kontextes.

Bewertung: Wenn der Benutzer `shailendra` zur Docker-Gruppe gehört oder `sudo`-Rechte hat, Docker-Befehle auszuführen, ermöglicht dieser Befehl das Erstellen eines Containers, der vollen Zugriff auf das Host-Dateisystem hat. Durch `chroot /mnt` agiert die Shell innerhalb des Containers dann effektiv als Root auf dem Host-System.

Empfehlung (Pentester): Führe diesen Docker-Befehl als `shailendra` aus.
Empfehlung (Admin): Füge Benutzer nur zur `docker`-Gruppe hinzu, wenn sie tatsächlich Root-Rechte auf dem System haben sollen. Konfiguriere `sudo` für Docker restriktiv, falls benötigt.

[shailendra@localhost ~]$ docker run -v /:/mnt --rm -it alpine chroot /mnt sh -p
Unable to find image 'alpine:latest' locally
latest: Pulling from library/alpine
96526aa774ef: Pull complete
Digest: sha256:eece025e432126ce23f223450a0326fbebde39cdf496a85d8c016293fc851978
Status: Downloaded newer image for alpine:latest
sh-4.4# id
uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel),11(cdrom),20(games),26,27 context=system_u:system_r:spc_t:s0
sh-4.4#
                     

Analyse: Der GTFOBins-Befehl wird als Benutzer `shailendra` ausgeführt. Da das `alpine`-Image lokal nicht vorhanden ist, wird es heruntergeladen. Anschließend wird der Container gestartet, das Host-Root-Verzeichnis gemountet, `chroot` ausgeführt und eine Shell gestartet. Der `id`-Befehl innerhalb dieser neuen Shell wird ausgeführt.

Bewertung:** **Privilege Escalation erfolgreich!** Der `id`-Befehl zeigt `uid=0(root)`. Obwohl man sich technisch gesehen in einem Container befindet, hat dieser durch den Mount und `chroot` vollen Root-Zugriff auf das darunterliegende Host-System.

Empfehlung (Pentester): Der Root-Zugriff ist etabliert. Suche die Root-Flag, die sich nun im (ehemaligen) Host-Root-Verzeichnis befinden sollte (jetzt `/`).
Empfehlung (Admin): Siehe vorherige Empfehlung zur `docker`-Gruppenmitgliedschaft.

sh-4.4# cd ~
sh-4.4# ls
anaconda-ks.cfg  flag.txt  get-docker.sh  logs}
sh-4.4# cat flag.txt
 __    ___   _      __    ___    __   _____  __  
/ /`  / / \ | |\ | / /`_ | |_)  / /\   | |  ( (` 
\_\_, \_\_/ |_| \| \_\_/ |_| \ /_/--\  |_|  _)_) 

 Pwned CyberSploit2 PC

share it with me twitter@cybersploit1

              Thanks !
                     

Analyse: Innerhalb der Root-Shell (im Docker/chroot-Kontext) wird in das Root-Home-Verzeichnis (`~` entspricht jetzt `/root` des Hosts) gewechselt. Dort wird die Datei `flag.txt` gefunden und ihr Inhalt ausgegeben.

Bewertung: Die Root-Flag (als ASCII-Art und Textnachricht) wurde gefunden.

Empfehlung (Pentester): Test abgeschlossen.
Empfehlung (Admin): Keine spezifische Empfehlung für diesen Schritt, außer die vorherigen Maßnahmen zur Verhinderung der PE umzusetzen.

Proof of Concept: Privilege Escalation

Ziel des POC: Demonstrieren, wie ein Benutzer (`shailendra`), der Docker-Befehle ausführen kann, durch Mounten des Host-Dateisystems in einen Container und anschließendes `chroot` vollständige Root-Rechte auf dem Host-System erlangen kann.

Voraussetzungen:

  • Shell-Zugang als Benutzer `shailendra`.
  • Benutzer `shailendra` ist Mitglied der Gruppe `docker` oder hat `sudo`-Rechte für Docker.
  • Docker-Daemon läuft auf dem Host.
  • Tool `docker` auf dem System verfügbar.

Schritt-für-Schritt Anleitung:

1. SSH-Login als shailendra: (Wie im Initial Access POC)

2. Docker-Breakout-Befehl ausführen: Den Befehl von GTFOBins verwenden.

[shailendra@localhost ~]$ docker run -v /:/mnt --rm -it alpine chroot /mnt sh
[...]
sh-4.4#
                     

3. Rechte überprüfen: Mit `id` die erlangten Root-Rechte bestätigen.

sh-4.4# id
uid=0(root) gid=0(root) groups=0(root)[...]

Ergebnis & Bewertung: **Privilege Escalation erfolgreich!** Durch Ausnutzung der Docker-Berechtigungen konnte eine Root-Shell auf dem Host-System erlangt werden. Dies ist eine bekannte und effektive Methode, wenn Docker unsicher konfiguriert ist.

Empfehlung (Pentester): Root-Zugriff ist etabliert. Flags extrahieren.
Empfehlung (Admin): **Beschränke die Mitgliedschaft in der `docker`-Gruppe streng.** Behandle Docker-Zugriff wie Root-Zugriff.

Flags

cat /pfad/zur/user.txt (aus Berichtende)
c7d0a8de1e03b25a6f7ed2d91b94dad6
cat /root/flag.txt (Wert aus Berichtende als root.txt interpretiert)
5C42D6BB0EE9CE4CB7E7349652C45C4A